// 导入compression-webpack-plugin
// 定义多页面配置

const getEntry = require('./entry.js')

const path = require('path')
const CompressionWebpackPlugin = require('compression-webpack-plugin')
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin

const resolve = dir => {
  return path.join(__dirname, dir)
}
const pages = getEntry('./src/pages/**/*.')

module.exports = {
  publicPath: process.env.NODE_ENV === 'development' ? '/' : '/h5Vip/',
  outputDir: 'dist',
  lintOnSave: process.env.NODE_ENV === 'development',
  productionSourceMap: false,
  /**
    * [chainWebpack 是一个函数，会接收一个基于 webpack-chain 的 ChainableConfig 实例。允许对内部的 webpack 配置进行更细粒度的修改。]
    * @param  {[type]} config [description]
    * @return {[type]}        [description]
    */
  chainWebpack: config => {
    config.resolve.alias
      .set('@', resolve('src')) // key,value自行定义，比如.set('@@', resolve('src/components'))
      .set('@images', resolve('src/assets/images'))
      .set('@fonts', resolve('src/assets/fonts'))
      .set('@css', resolve('src/assets/css'))
    if (process.env.NODE_ENV === 'production') {
      if (process.env.VUE_APP_CURRENTMODE === 'analyz') {
        config
          .plugin('webpack-bundle-analyzer')
          .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin)
          .end()
      }
    }
  },
  /**
  * [configureWebpack 提供一个对象，该对象将会被 webpack-merge 合并入最终的 webpack 配置（以函数方式配置或者以插件方式配置webpack）]
  * @param  {[type]} config [description]
  * @return {[type]}        [description]
  */
  // configureWebpack: config => {
  //   if (process.env.NODE_ENV === 'production') {
  //     // 生产环境
  //     return {
  //       plugins: [new CompressionWebpackPlugin({
  //         algorithm: 'gzip',
  //         test: /\.js$|\.html$|\.css/,
  //         threshold: 10240, // 对超过10k的数据进行压缩
  //         deleteOriginalAssets: false // 是否删除原文件
  //       })]
  //     }
  //   } else {
  //     // 开发环境
  //   }
  // },
  configureWebpack: config => {
    const plugins = []
    if (process.env.NODE_ENV === 'production') {
      // 生产环境
      plugins.push(new CompressionWebpackPlugin({
        algorithm: 'gzip',
        test: /\.js$|\.html$|\.css/,
        threshold: 10240, // 对超过10k的数据进行压缩
        deleteOriginalAssets: false // 是否删除原文件
      }))
    }
    if (process.env.VUE_APP_CURRENTMODE === 'analyze') {
      plugins.push(new BundleAnalyzerPlugin())
    }
  },
  pages,
  // 配置开发环境代理
  devServer: {
    index: '/',
    // https: true, // 是否开启https
    open: process.env.NODE_ENV === 'development',
    hot: true,
    proxy: process.env.VUE_APP_CURRENTMODE === 'test' ? {
      '/api': {
        target: process.env.VUE_APP_PROXYURL, // 请求源地址
        ws: true, // 是否代理ws
        changeOrigin: true, // 是否跨域
        pathRewrite: {
          '^/api': ''
        }
      }
    } : null,
    before: app => {
    // 生成快速导航也没奶妈呢
      app.get('/', (req, res, next) => {
        for (const i in pages) {
          res.write(`<a target="_self" href="/${i}">/${i}</a></br>`)
        }
        res.end()
      })
    }
  }
}
